/**
 * 全站http配置
 */
// const baseUrl = "/api";
const baseUrl = "https://houqin.xauat.edu.cn"; //生产环境访问
import axios from 'axios'
const timeout = 6000000;
const successCode = [200, 0, '200', '0'];
const CODE_MESSAGE = {
  200: '服务器成功返回请求数据',
  201: '新建或修改数据成功',
  202: '一个请求已经进入后台排队(异步任务)',
  204: '删除数据成功',
  400: '发出信息有误',
  401: '用户没有权限(令牌失效、用户名、密码错误、登录过期)',
  402: '令牌过期',
  403: '用户得到授权，但是访问是被禁止的',
  404: '请求地址不存在',
  406: '请求格式不可得',
  410: '请求资源被永久删除，且不会被看到',
  500: '服务器发生错误',
  502: '网关错误',
  503: '服务不可用，服务器暂时过载或维护',
  504: '网关超时',
}
axios.defaults.timeout = timeout;
//返回其他状态吗
axios.defaults.validateStatus = function (status) {
  return status >= 200 && status <= 500; // 默认的
};
//跨域请求，允许保存cookie
axios.defaults.withCredentials = true;

//HTTPrequest拦截
axios.interceptors.request.use(config => {
    if(config.url.indexOf('http')<0){
        config.url = baseUrl + config.url;
    }
    let token = sessionStorage.getItem("TOKEN");
    if (token) config.headers['TOKEN'] = `${token}`
    return config;
  },
  error => {
    console.log(error);
    return Promise.reject(error);
  }
);
//HTTPresponse拦截
axios.interceptors.response.use(
  (response) => handleData(response),
  error => {
    const {
      response
    } = error
    if (response === undefined) {
      console.log("response=undefined");
      return {}
    } else return handleData(response)
  }
);

/**
 * axios响应拦截器
 * @param config 请求配置
 * @param data response数据
 * @param status HTTP status
 * @param statusText HTTP status text
 */
const handleData = async ({
  config,
  data,
  status,
  statusText
}) => {
  // 若data.code存在，覆盖默认code
  let code = data && data.code ? data.code : status
  // 若code属于操作正常code，则status修改为200
  if (successCode.indexOf(data.code) + 1) {
    code = 200
  }
  switch (code) {
    case -1:
      if (data.msg) {
        alert(data.msg)
      }
      return data
    case 200:
      if (data.msg) {
        console.log(data.msg)
      }
      return data
    case 1005:
      if (data.msg) {
        alert(data.msg)
      }
      return data
    case 401:
      localStorage.clear();
      window.location.reload();
      break
  }
  // 异常处理
  // 若data.msg存在，覆盖默认提醒消息
  const errMsg = `${
    data && data.msg
      ? data.msg
      : CODE_MESSAGE[code]
      ? CODE_MESSAGE[code]
      : statusText
  }`
  // 是否显示高亮错误(与errorHandler钩子触发逻辑一致)
  alert(errMsg)
  data = {
    success: false,
    msg: "服务访问异常！"
  }

  return data //Promise.reject(data)
}

export default axios;